home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / SYS / s / BackupMD.rexx < prev    next >
OS/2 REXX Batch file  |  1996-09-26  |  6KB  |  140 lines

  1. /* This script will back up my 5 source code directories to a floppy disk. 
  2.     I keep the source code for MegaD in MD: MDP: COM: SP: and RX:.
  3.     If you should want to use this script to backup a directory you should
  4.     change the directory names to something more useful.  The script expect
  5.     a blank disk or a disk that has only been used by this script.  
  6.     Do not create your own directory on this disk or the script will fail.
  7. */
  8.  
  9. lhaFileName = "odds&ends:commands/lha"
  10. options results
  11. signal on syntax
  12. if ~show("L","rexxsupport.library") then call addlib"rexxsupport.library",0,-30
  13.  
  14. address MEGAD
  15. dbug TRUE
  16. freevolumes /* clear out the directory buffers and close directory windows */
  17.  
  18. /* be sure that the sort is on Name */
  19. "MenuCheck 'show,sort on,name' Check"
  20.  
  21. diskin /* wait for a disk to be inserted into a drive.  The script expect DF0: */
  22. if result = "ABORT" then exit /* user closed window */
  23.  
  24. "Mark DF0:"    /* Load the disk in drive DF0: and keep track of it for ARexx calls */
  25. if result == "" then exit    /* the root disk directory did not load */
  26. volumename = result            /* keep track of the real volume name */
  27. dest TRUE                    /* Select the Dest gadget of the Marked window */
  28. dirname = date(s)            /* get the current date from ARexx to use as a directory name  */
  29. unselectItem "'"dirname"'"        /* check for directory with this name */
  30. if result ~= "" then do        /* The directory already exsist */
  31.     say dirname "exist, can not create directory"
  32.     exit 0                    
  33. end
  34.  
  35. /* before we add this directory lets find out what the last date was */
  36. selDir            /* select all directories in all open directory windows */
  37. lastdir = ""
  38. do forever
  39.     nextItem name clear         /* get the next selected item and unselect it */
  40.     if result = "" then leave    /* no more selected directories */
  41.     lastdir = result            /* Save the last directory name */
  42. end
  43.  
  44. if lastdir ~= "" then do        /* The name of the directory are sorted dates */
  45.     lastdir = right(lastdir,8)    /* grab the last 8 characters of the directory name */
  46.     year = substr(lastdir,3,2)    /* Pull the pieces out of the name to make  */
  47.     month = substr(lastdir,5,2)    /* a date filter */
  48.     day = substr(lastdir,7,2)
  49. end
  50.  
  51. CreateDir "'"dirname"'"            /* create a directory with the sorted date string */
  52.  
  53. child "'"dirname"'"             /* move to child */
  54. dirname = insert(volumename,dirname)
  55. mark "'"dirname"'"                 /* mark the child directory */
  56. lock TRUE                         /* lock the window so we can't lose it, 
  57.                                     it is still set as "Dest" */
  58.  
  59. /* set up the patterns for selecting files */
  60. FreePattern                        /* start with a blank list */
  61. AddPattern name in md#?.c
  62. AddPattern name in md#?.h
  63. AddPattern name in #?.lnk
  64. AddPattern name in #?.rexx
  65. AddPattern name in smakefile
  66. AddPattern name out #?protos.h    /* Please note: You may create as many filters 
  67.                                     as you wish with ARexx */
  68.                                     
  69. /* if lastdir is not "" then we have already backed up to this disk
  70.     I usually back up everything to the first directory of the new backup disk
  71.     then each future backup is only of the files changed since the first backup
  72.     This way I can recover from one disk and usually have 5 or 6 backup on one disk
  73. */
  74. if lastdir ~= "" then do
  75.     /* we need to move the last sorted directory string around into a
  76.         date filter which is the opposite format */
  77.     string = insert('-',day)        /* add '-' to define Less Than date */
  78.     string = insert(string,'-')
  79.     string = insert(string,month)
  80.     string = insert(string,'-')
  81.     string = insert(string,year) /* by now the string should look like -18-12-99 */
  82.     AddPattern date out string
  83.     /* another note about patterns and ARexx.  At this point we have a total of
  84.         7 filters, 5 IN type, 2 OUT type,  6 are name filters, 
  85.         one is a date filter.  There is one that will select only the "smakefile"
  86.         should one exist.  There are no limits to the number of Filters you
  87.         wish to use with ARexx.
  88.     */
  89. end
  90.  
  91.  
  92.  
  93. /* Back up assign directories */
  94. arguments = "md mdp com rx sp"
  95. do while arguments ~= ""
  96.     PARSE VAR arguments filename arguments    /* pull one of the arguments */
  97.     filename = STRIP(filename)            /* strip the spaces */
  98.     arguments = STRIP(arguments)            
  99.     assign = insert(filename,':')        /* add the ':' for the assigned name */
  100.     mark assign                            /* Open and Mark the Assigned directory */
  101.     UsePattern select                    /* use all of the patterns to select items 
  102.                                             in the open directory window */
  103.     sourcebytes /* get how many bytes were selected */
  104.     bytes = result
  105.     if bytes ~= 0 then do                 /* files were selected by the filters */
  106.         /* create a special User gadget to call */
  107.         /* A special "Flags to add after Program Name" field to create the .lha flagname
  108.             this will create a string that looks somewhat like this:
  109.                 'a "df0:19921218/md"'
  110.         */
  111.         flagname = insert(dirname,'/')
  112.         flagname = insert(flagname,filename)
  113.         string = insert("a ",'"'flagname'"')
  114.         string = insert("UserGadget combineAll MDscreen Execute LHAPACK odds&ends:commands/lha ","'"string"'");
  115.         string = insert(string," NULL NULL NULL NULL NULL NULL NULL NULL");
  116.         addproctrl string /* this creates LHAPACK */
  117.         
  118.         LHAPACK                /* Call the program control we have just added */
  119.         delproCtrl LHAPACK    /* remove this Program Control */
  120.         
  121.         bytes = bytes%110
  122.         Call delay(bytes)/* LHA packs 110 bytes to a floppy per tick (1/50 sec) */
  123.                             /* or 420 bytes to the ram disk on an A3000/25 */
  124.                             /* This was added to prevent multiple LHA running trying */
  125.                             /* to write to one floppy at one time.*/
  126.     end
  127.     CloseMark /* close the Marked directory */
  128. end
  129.  
  130. UpdateDir /* update the current Dest directory */
  131. exit 0
  132.  
  133. syntax:
  134.     if(rc ~= 0) then do
  135.         say "at syntax"
  136.         say "rc = " rc
  137.         end
  138.     exit 0
  139.  
  140.